home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 2002 November / SGI Freeware 2002 November - Disc 1.iso / dist / fw_ddd.idb / usr / freeware / share / ddd-3.3.1 / vsllib / std.vsl.z / std.vsl
Text File  |  2001-10-09  |  6KB  |  226 lines

  1. // $Id: std.vsl,v 1.2 2000/06/09 13:06:27 andreas Exp $
  2. // VSL Standard Library
  3.  
  4. // Copyright (C) 1993 Technische Universitaet Braunschweig, Germany.
  5. // Written by Andreas Zeller <zeller@gnu.org>.
  6. // 
  7. // This file is part of DDD.
  8. // 
  9. // DDD is free software; you can redistribute it and/or
  10. // modify it under the terms of the GNU General Public
  11. // License as published by the Free Software Foundation; either
  12. // version 2 of the License, or (at your option) any later version.
  13. // 
  14. // DDD is distributed in the hope that it will be useful,
  15. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  17. // See the GNU General Public License for more details.
  18. // 
  19. // You should have received a copy of the GNU General Public
  20. // License along with DDD -- see the file COPYING.
  21. // If not, write to the Free Software Foundation, Inc.,
  22. // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  23. // 
  24. // DDD is the data display debugger.
  25. // For details, see the DDD World-Wide-Web page, 
  26. // `http://www.gnu.org/software/ddd/',
  27. // or send a mail to the DDD developers <ddd@gnu.org>.
  28.  
  29. #include "builtin.vsl"
  30.  
  31. // Version
  32. std_version() = "$Id: std.vsl,v 1.2 2000/06/09 13:06:27 andreas Exp $";
  33.  
  34. // Constants
  35. rulethickness() = 1;
  36. whitethickness() = 2;
  37. indentamount() = hspace("  ");
  38. true  = 1;
  39. false = 0;
  40.  
  41. // Some Macros...
  42.  
  43. // Maximum, minimum
  44. max(a) = a;
  45. max(a, b, ...) = if a > b then max(a, ...) else max(b, ...) fi;
  46. min(a) = a;
  47. min(a, b, ...) = if a < b then min(a, ...) else min(b, ...) fi;
  48.  
  49. // Fillers
  50. hfill() = vfix(fill());
  51. vfill() = hfix(fill());
  52.  
  53. // Neutral elements
  54. hnull() = vfill();    // neutral element for &
  55. vnull() = hfill();    // neutral element for |
  56.  
  57. // Black and white lines
  58. hrule(thickness) = rule() & vspace(thickness);
  59. vrule(thickness) = rule() | hspace(thickness);
  60. hwhite(thickness) = fill() & vspace(thickness);
  61. vwhite(thickness) = fill() | hspace(thickness);
  62.  
  63. hrule() = hrule(rulethickness());
  64. vrule() = vrule(rulethickness());
  65. hwhite() = hwhite(whitethickness());
  66. vwhite() = vwhite(whitethickness());
  67.  
  68. // Fixers
  69. fix(a)  = hfix(vfix(a));
  70. space(a) = hspace(a) + vspace(a);
  71.  
  72. // Box
  73. box(x) = x;
  74. box(x,y) = hspace(x) + vspace(y);
  75.  
  76. // Alignments
  77. halign(...) = (&)(...);
  78. valign(...) = (|)(...);
  79. talign(...) = (~)(...);
  80.  
  81. // Reverse alignments
  82. hralign() = hnull();
  83. hralign(head) = head;
  84. hralign(head, ...) = hralign(...) & head;
  85. tralign() = hnull();
  86. tralign(head) = head;
  87. tralign(head, ...) = tralign(...) ~ head;
  88. vralign() = vnull();
  89. vralign(head) = head;
  90. vralign(head, ...) = vralign(...) | head;
  91.  
  92. // Lists
  93. hlist(_) = hnull();
  94. hlist(_, head) = head;
  95. hlist(sep, head, ...) = head & sep & hlist(sep, ...);
  96.  
  97. tlist(_) = hnull();
  98. tlist(_, head) = head;
  99. tlist(sep, head, ...) = head ~ sep ~ tlist(sep, ...);
  100.  
  101. vlist(_) = vnull();
  102. vlist(_, head) = head;
  103. vlist(sep, head, ...) = head | sep | vlist(sep, ...);
  104.  
  105. hvlist(_) = vnull();
  106. hvlist(sep, head) = head & sep;
  107. hvlist(sep, head, ...) = head & sep | hvlist(sep, ...);
  108.  
  109. tvlist(_) = vnull();
  110. tvlist(sep, head) = head ~ sep;
  111. tvlist(sep, head, ...) = head ~ sep | tvlist(sep, ...);
  112.  
  113. vhlist(_) = vnull();
  114. vhlist(sep, head) = head | sep;
  115. vhlist(sep, head, ...) = (head | sep) & vhlist(sep, ...);
  116.  
  117. vtlist(_) = vnull();
  118. vtlist(sep, head) = head | sep;
  119. vtlist(sep, head, ...) = (head | sep) ~ vtlist(sep, ...);
  120.  
  121. commalist(...)     = tlist(", ", ...);
  122. semicolonlist(...) = tlist("; ", ...);
  123.  
  124. // Make size even
  125. heven(box, align) = box ^ hspace(box + box % align);
  126. veven(box, align) = box ^ vspace(box + box % align);
  127. even(box, align) = heven(veven(box, align), align);
  128. heven(box) = heven(box, 2);
  129. veven(box) = veven(box, 2);
  130. even(box) = heven(veven(box));
  131.  
  132. // Conversions
  133. // Convert digit
  134. num(a);
  135. digit(0) = "0";
  136. digit(1) = "1";
  137. digit(2) = "2";
  138. digit(3) = "3";
  139. digit(4) = "4";
  140. digit(5) = "5";
  141. digit(6) = "6";
  142. digit(7) = "7";
  143. digit(8) = "8";
  144. digit(9) = "9";
  145. digit(10) = "a";
  146. digit(11) = "b";
  147. digit(12) = "c";
  148. digit(13) = "d";
  149. digit(14) = "e";
  150. digit(15) = "f";
  151. digit(_) = fail("invalid digit() argument");
  152.  
  153. // Convert numbers
  154. // Natural numbers
  155. pnum(a, base) =
  156.   if a < base then
  157.     digit(a) 
  158.   else 
  159.     pnum(a / base, base) & pnum(a % base, base)
  160.   fi;
  161.  
  162. // Entire numbers
  163. num(a, base) =
  164.   if a < 0 then "-" & pnum(0 - a, base) else pnum(a, base) fi;
  165. num(a) = num(a, 10);
  166.  
  167. // Bases
  168. dec(a) = num(a, 10);
  169. oct(a) = num(a, 8);
  170. bin(a) = num(a, 2);
  171. hex(a) = num(a, 16);
  172.  
  173. // Lines with some space at the inner side
  174. n_rule() = hrule() | hwhite();
  175. w_rule() = vrule() & vwhite();
  176. s_rule() = hwhite() | hrule();
  177. e_rule() = vwhite() & vrule();
  178.  
  179. // Frames
  180. whiteframe(box, thickness) = 
  181.   hwhite(thickness) 
  182. | vwhite(thickness) & box & vwhite(thickness) 
  183. | hwhite(thickness);
  184. whiteframe(box) = whiteframe(box, whitethickness());
  185.  
  186. ruleframe(box, thickness) = 
  187.   hrule(thickness) 
  188. | vrule(thickness) & box & vrule(thickness) 
  189. | hrule(thickness);
  190. ruleframe(box) = ruleframe(box, rulethickness());
  191.  
  192. frame(box)       = ruleframe(whiteframe(box));
  193. doubleframe(box) = frame(frame(box));
  194. thickframe(box)  = ruleframe(frame(box));
  195.  
  196. // Centering
  197. hcenter(box)  = fill() & box & fill();
  198. vcenter(box)  = fill() | box | fill();
  199. center(box)   = hcenter(vcenter(box));
  200.  
  201. // Flushing
  202. n_flush(box) = hcenter(box) | fill();
  203. s_flush(box) = fill() | hcenter(box);
  204. w_flush(box) = vcenter(box) & fill();
  205. e_flush(box) = fill() & vcenter(box);
  206. sw_flush(box) = fill() | (box & fill());
  207. nw_flush(box) = (box & fill()) | fill();
  208. se_flush(box) = fill() | (fill() & box);
  209. ne_flush(box) = (fill() & box) | fill();
  210.  
  211. // Indentation
  212. indent(box) = indentamount() & box;
  213.  
  214. // Underlines, Overlines, Crosslines
  215. underline(box) = box | hrule();
  216. overline(box)  = hrule() | box;
  217. crossline(box) = hfix(box ^ vcenter(hrule()));
  218.  
  219. // Poor Man's Bold
  220. doublestrike(box) = box ^ (hspace(1) & box);
  221.  
  222. // Abbreviations
  223. dquote() = "\"";
  224. squote() = "'";
  225. copyright() = "(c)";
  226.